//
//  EmvHandleManager.h
//  MPOSDemoProject
//
//  Created by lfy on 2018/6/7.
//  Copyright © 2018年 develop. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "MPBlueToothDefine.h"
#import "MPBlueToothCallback.h"
#import "MPEmvModel.h"

@interface EmvHandleManager : NSObject
/**
 更新EMV公钥信息

 @param type 更新策略，清除或者增加
 @param data 更新信息
 @param listener 更新回调结果
 */
+ (void)loadPublicKey:(OperateCodeEnum)type data:(NSData*)data handle:(OnOperateListener)listener;

/**
 更新AID信息

 @param type 更新策略，清除或者增加
 @param data 更新信息
 @param listener 更新回调结果
 */
+ (void)loadAID:(OperateCodeEnum)type data:(NSData*)data handle:(OnOperateListener)listener;

/**
 该接口用于 设置 MPOS的 EMV终端的内核参数，该指令需要在设置AID前执行，TAG属性对照
 * <p>9F35  终端类型 1字节<p>
 * <p>9F33 终端性能 3字节<p>
 * <p>9F40 终端附加性能 5字节<p>
 * <p>9F39 pos entry 1字节<p>
 * <p>9F01 acp_id 6字节<p>
 * <p>9F15商户类型码 5字节<p>
 * <p>9F16 商户号码  15字节<p>
 * <p>5F2A 交易货币代码 2字节<p>
 * <p>5F36  交易货币指数 1字节<p>
 * <p>9F3C 交易参考货币代码 2字节<p>
 * <p>9F3D 交易参考货币指数 1字节<p>
 * <p>9F1A 终端国家代码 2字节<p>
 * <p>9F1E IFD序列号 8字节<p>
 * <p>9F1C 终端号 8字节<p>
 * <p>9F66 终端交易属性 4字节<p>
 * <p>DF44 缺省DDOL <p>
 * <p>DF45 缺省TDOL var<p>
 * <p>BF73 主密钥索引 1字节<p>

 @param data tlv格式
 @param listener 设置成功与否回调
 */
+ (void)setTlv:(NSData*)data handle:(onLoadEmvAttributeSetListener)listener;

/**
 该接口用于 获取 MPOS的 EMV终端的相关交易参数，通过{@link OnLoadEmvAttributeListener#OnGetTLV(byte[], com.koolpos.mpos.utils.Event.SetTLVResEnum)}接口返回结果，
 *
 * <p>9F35  终端类型 1字节<p>
 * <p>9F33 终端性能 3字节<p>
 * <p>9F40 终端附加性能 5字节<p>
 * <p>9F39 pos entry 1字节<p>
 * <p>9F01 acp_id 6字节<p>
 * <p>9F15商户类型码 5字节<p>
 * <p>9F16 商户号码  15字节<p>
 * <p>5F2A 交易货币代码 2字节<p>
 * <p>5F36  交易货币指数 1字节<p>
 * <p>9F3C 交易参考货币代码 2字节<p>
 * <p>9F3D 交易参考货币指数 1字节<p>
 * <p>9F1A 终端国家代码 2字节<p>
 * <p>9F1E IFD序列号 8字节<p>
 * <p>9F1C 终端号 8字节<p>
 * <p>9F66 终端交易属性 4字节<p>
 * <p>DF44 缺省DDOL <p>
 * <p>DF45 缺省TDOL var<p>
 * <p>BF73 主密钥索引 1字节<p>

 @param listener 结果返回回调
 */
+ (void)getTlv:(onLoadEmvAttributeGetListener)listener;

/**
 开始EMV执行流程

 @param emvInfo EMV对象参数
 @param success 成功回调
 @param fail 失败回调
 */
+ (void)startEmvProcess:(MPEmvModel*)emvInfo success:(OnEmvProcessSuccessListener)success fail:(OnEmvProcessFailListener)fail;

/**
 二次授权，回写IC卡数据

 @param emvOnlineModel 二次授权初始化参数对象
 @param listener 回写结果回调
 */
+ (void)onICCardWriteback:(MPEmvOnlineModel*)emvOnlineModel handle:(OnCardWritebackListener)listener;
@end
